home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / modules / nessus-2.2.8.mo / usr / lib / nessus / plugins / nntp_func.inc < prev    next >
Text File  |  2005-03-31  |  2KB  |  88 lines

  1. # (C) Michel Arboi 2002-2005
  2. #
  3. # this file is released under the GPL v2
  4. #
  5. # NNTP protocol is defined by RFC 977
  6. # NNTP message format is defined by RFC 1036 (obsoletes 850); see also RFC 822.
  7. #
  8.  
  9. function nntp_auth(socket, username, password)
  10. {
  11.  local_var     buff;
  12.  if (!username) return (0);
  13.  
  14.  send(socket:socket, data: string("AUTHINFO USER ", username, "\r\n"));
  15.  buff = recv_line(socket:socket, length:2048);
  16.  send(socket:socket, data: string("AUTHINFO PASS ", password, "\r\n"));
  17.  buff = recv_line(socket:socket, length:2048);
  18.  if ("502 " >< buff) { 
  19.   debug_print(string("Bad username/password for NNTP server"));
  20.   return (0);
  21.  }
  22.  return (1);
  23. }
  24.  
  25. function nntp_connect(port, username, password)
  26. {
  27.   local_var s, a;
  28.   s = open_sock_tcp(port);
  29.   if (s) { 
  30.    buff = recv_line(socket: s, length: 2048);
  31.    a = nntp_auth(socket: s, username: username, password: password); 
  32.    if (! a) { close(s); return; }
  33.   }
  34.   return (s);
  35. }
  36.  
  37. function nntp_post(socket, message)
  38. {
  39.   local_var    buff;
  40.  
  41.   if (! socket) { return (0); }
  42.   send(socket: socket, data:string("POST\r\n"));
  43.   buff = recv_line(socket:s, length: 2048);
  44.  
  45.   # 340 = Go ahead; 440 = posting prohibited
  46.   if ("340 " >< buff) {
  47.     send(socket: socket, data: message);
  48.     buff = recv_line(socket: socket, length: 2048);
  49.     if ("240 " >< buff) { return (1); }
  50.     if (ereg(pattern: "^4[34][0-9] +.*unwanted distribution .*local", 
  51.              string: buff, icase:1) &&
  52.         ereg(pattern: "Distribution: +local", string: message)) {
  53.     return -1;
  54.     }
  55.   }
  56.  return (0);
  57. }
  58.  
  59. function nntp_article(id, timeout, port, username, password)
  60. {
  61.   local_var    t;
  62.   for (t=0; t < timeout; t=t+5)
  63.   {
  64.     sleep(5);
  65.     s = nntp_connect(port:port, username: username, password: password);
  66.     if (s) {
  67.       send(socket:s, data: string("ARTICLE ", id, "\r\n"));
  68.       buff = recv_line(socket: s, length: 2048);
  69.       send(socket:s, data: string("QUIT\r\n"));
  70.       close(s);
  71.       # display(string("Article > ", buff));
  72.       # WARNING! If the header X-Nessus is removed, change this line!
  73.       if (ereg(pattern:"^220 .*X-Nessus:", string: buff)) { return (buff); }
  74.     }
  75.   }
  76.   return (0);
  77. }
  78.  
  79. function nntp_make_id(str)
  80. {
  81.  local_var    id;
  82.  # Not RFC 822 compliant - we should use a full domain name
  83.  # We do not check "str", but it should not contain '@' or '>'
  84.  id=string("<", str, ".", rand(), "@", this_host(), ".NESSUS>");
  85.  return(id);
  86. }
  87.  
  88.